#ifndef _COMMENT_H
#define _COMMNET_H
#include <stdio.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdbool.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/select.h>
#include <signal.h>
#include <sys/epoll.h>
#include <sqlite3.h>
#include <time.h>
// 定义一个用来判断错误信息的宏函数
#define error(cmd, result) \
    if (result < 0)        \
    {                      \
        perror(cmd);       \
        return -1;         \
    }
typedef enum // 枚举
{
    ok,
    no,
    StudentLogin,       // 学生登录
    StudentEnroll,      // 学生注册
    TeacherEnroll,      // 教师注册
    TeacherLogin,       // 教师登录
    Inquire,            // 查询私聊对象
    groupchat,          // 群聊
    privatechat,        // 私聊
    inprivate,          // 点进私聊
    outprivate,         // 退出私聊
    message,            // 留言
    viewmessage,        // 查看留言
    howmessage,         // 有多少留言
    viewover,           // 查看结束
    delemessage,        // 删除留言
    homework,           // 布置作业
    dohomework,         // 完成作业
    viewhomework,       // 查看作业
    viewdohomework,     // 查看答案
    changescore,        // 打成绩
    notfind,            // 不存在
    viewteacher,        // 查看教师信息
    viewstudent,        // 查看学生信息
    findteacher,        // 查找教师
    changeteacherscore, // 改变教师的评分
    quit,               // 退出
} MSG_TYPE;

typedef struct msg // 传输数据结构体
{
    MSG_TYPE type;  // 数据类型
    char buf[1020]; // 存放数据内容
} MSG;

typedef struct TeachorEnroll // 教师注册结构体
{
    char name[128];    // 教师名字
    char pwd[128];     // 教师密码
    char sex[128];     // 教师性别
    char subject[128]; // 教师教的科目
    int wages;         // 教师的工资
    int score;         // 教师的评分
} TEN;

typedef struct StudentEnroll // 学生注册结构体
{
    int id;         // 学生学号
    char name[128]; // 学生名字
    char pwd[128];  // 学生密码
    char sex[128];  // 学生性别
    int score;      // 学生的成绩
} SEN;

typedef struct loginInfo // 登录信息
{
    char name[128]; // 用户名
    int fd;         // 用户套接字，如果是TCP这里应该用户的套接字
} LOGIN_INFO;

typedef struct homework // 作业结构体
{
    char teacher[128];  // 教师名字
    char student[128];  // 学生名字
    char subjects[128]; // 科目
    char text[500];     // 作业
    char yorno[128];    // 作业是否正确
    // char t[64];      // 布置的时间
} HWORK;

typedef struct // 私聊的结构体
{
    char selfName[128]; // 自己的名字
    char destName[128]; // 对方的名字
    char text[500];     // 聊天的内容
    char t[64];         // 聊天的时间
} PVCH;

typedef struct queryResult // 查询的结构体
{
    char **pzResult; // 查询结果的指针
    int row;         // 查询到的数据的行数
    int col;         // 查询到的数据的列数
} QUREY_RST;

typedef struct teacherscore // 教师评分结构体
{
    char teachername[128]; // 教师名字
    int score;             // 教师的评分
} TESC;

#endif